package com.itheima.config;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.itheima.domain.Conversation;
import com.itheima.mapper.ConversationMapper;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.messages.AssistantMessage;
import org.springframework.ai.chat.messages.Message;
import org.springframework.ai.chat.messages.MessageType;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 存每一个历史会话的记录（一问，一达2，是2条记录）
 */
@Component
public class MysqlChatMemory implements ChatMemory {

    @Autowired
    private ConversationMapper conversationMapper;

    @Override
    public void add(String conversationId, List<Message> messages) {
        List<Conversation> list = messages.stream().map(m -> Conversation.builder().type(m.getMessageType().getValue()).message(m.getText()).conversationId(conversationId).createTime(LocalDateTime.now()).build()).toList();
        conversationMapper.insert(list);
    }

    @Override
    public List<Message> get(String conversationId) {

        List<Conversation> conversations = conversationMapper.selectList(new LambdaQueryWrapper<Conversation>()
                .eq(Conversation::getConversationId, conversationId));
        return conversations.stream().map(c -> {
            Message message = null;
            if (MessageType.ASSISTANT.getValue().equals(c.getType())) {
                message = new AssistantMessage(c.getMessage());
            } else if (MessageType.USER.getValue().equals(c.getType())) {
                message = UserMessage.builder().text(c.getMessage()).build();
            }
            return message;
        }).toList();
    }

    @Override
    public void clear(String conversationId) {
        conversationMapper.delete(new LambdaQueryWrapper<Conversation>().eq(Conversation::getConversationId, conversationId));
    }
}
